'''
给你一个数组 nums和一个值 val，你需要 原地 移除所有数值等于val的元素，并返回移除后数组的新长度。

不要使用额外的数组空间，你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
'''
class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        a = 0
        b = 0
        while b < len(nums):
            if nums[b] == val:
                b += 1
            else:
                # 当且仅当我们发现nums[a] != val的时候，我们把这个数拷贝到b指向的位置，
                # 默认b是从0开始的，然后b += 1指向下一个位置。
                nums[a] = nums[b]
                a += 1
                b += 1
        # 返回的是数组的长度啊
        return a
'''
因为fast是一直都加
fast是元素没有移除而是覆盖了，这样前几个数就是要的解
'''
class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        fast = 0
        slow = 0
        while fast < len(nums):
            if nums[fast] != val:
                nums[slow] = nums[fast]
                slow += 1
            fast += 1
        return slow
